home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / game / shoot / ADescentSrc.lha / descent / ui / keypad.c < prev    next >
C/C++ Source or Header  |  1998-09-26  |  17KB  |  580 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <math.h>
  16. #include <string.h>
  17.  
  18.  
  19. #include "fix.h"
  20. #include "types.h"
  21. #include "gr.h"
  22. #include "key.h"
  23.  
  24. #include "mono.h"
  25.  
  26. #include "ui.h"
  27.  
  28. #include "mem.h"
  29. #include "cflib.h"
  30. #include "func.h"
  31. #include "error.h"
  32.  
  33. #define MAX_NUM_PADS 20
  34.  
  35. static UI_GADGET_BUTTON * Pad[17];
  36. static UI_KEYPAD * KeyPad[MAX_NUM_PADS];
  37. static int active_pad;
  38.  
  39. static int desc_x, desc_y;
  40.  
  41. static int HotKey[17];
  42. static int HotKey1[17];
  43.  
  44. #define REMOVE_EOL(s)     (*(strstr( (s), "\n" ))='\0')
  45.  
  46. #define debug(x) //printf x
  47.  
  48. int ui_pad_get_current()
  49. {
  50.     return active_pad;
  51. }
  52.  
  53. void ui_pad_init()
  54. {
  55.     int i;
  56.  
  57.     for (i=0; i< MAX_NUM_PADS; i++ )
  58.         KeyPad[i] = NULL;
  59.  
  60.     active_pad = -1;
  61. }
  62.  
  63. void ui_pad_close()
  64. {
  65.     int i, j;
  66.  
  67.     for (i=0; i< MAX_NUM_PADS; i++ )
  68.         if (KeyPad[i])
  69.         {
  70.             for (j=0; j<17; j++ )
  71.                 free(KeyPad[i]->buttontext[j]);
  72.             free( KeyPad[i] );
  73.             KeyPad[i] = NULL;   
  74.         }
  75.  
  76. }
  77.  
  78.  
  79. void LineParse( int n, char * dest, char * source )
  80. {
  81.     int i = 0, j=0, cn = 0;
  82.  
  83.     // Go to the n'th line
  84.     while (cn < n )
  85.         if ((unsigned char)source[i++] == 179 )
  86.             cn++;
  87.  
  88.     // Read up until the next comma
  89.     while ( (unsigned char)source[i] != 179 )
  90.     {
  91.         dest[j] = source[i++];
  92.         j++;        
  93.     }
  94.  
  95.     // Null-terminate   
  96.     dest[j++] = 0;
  97. }
  98.  
  99. void ui_pad_activate( UI_WINDOW * wnd, int x, int y )
  100. {
  101.     int w,h,row,col, n;
  102.     int bh, bw;
  103.  
  104.     bw = 56; bh = 30;
  105.  
  106.     gr_set_current_canvas( wnd->canvas );
  107.     ui_draw_box_in( x, y, x+(bw*4)+10 + 200, y+(bh*5)+45 );
  108.  
  109.     x += 5;
  110.     y += 20;
  111.  
  112.     desc_x = x+2;
  113.     desc_y = y-17;
  114.         
  115.     n=0; row = 0; col = 0; w = 1; h = 1;
  116.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  117.     Pad[n]->canvas->cv_font = ui_small_font;
  118.     n=1; row = 0; col = 1; w = 1; h = 1;
  119.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  120.     Pad[n]->canvas->cv_font = ui_small_font;
  121.     n=2; row = 0; col = 2; w = 1; h = 1;
  122.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  123.     Pad[n]->canvas->cv_font = ui_small_font;
  124.     n=3; row = 0; col = 3; w = 1; h = 1;
  125.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  126.     Pad[n]->canvas->cv_font = ui_small_font;
  127.     n=4; row = 1; col = 0; w = 1; h = 1; 
  128.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  129.     Pad[n]->canvas->cv_font = ui_small_font;
  130.     n=5; row = 1; col = 1; w = 1; h = 1; 
  131.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  132.     Pad[n]->canvas->cv_font = ui_small_font;
  133.     n=6; row = 1; col = 2; w = 1; h = 1; 
  134.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  135.     Pad[n]->canvas->cv_font = ui_small_font;
  136.     n=7; row = 1; col = 3; w = 1; h = 2; 
  137.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  138.     Pad[n]->canvas->cv_font = ui_small_font;
  139.     n=8; row = 2; col = 0; w = 1; h = 1; 
  140.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  141.     Pad[n]->canvas->cv_font = ui_small_font;
  142.     n=9; row = 2; col = 1; w = 1; h = 1; 
  143.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  144.     Pad[n]->canvas->cv_font = ui_small_font;
  145.     n=10; row = 2; col = 2; w = 1; h = 1;
  146.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  147.     Pad[n]->canvas->cv_font = ui_small_font;
  148.     n=11; row = 3; col = 0; w = 1; h = 1;
  149.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  150.     Pad[n]->canvas->cv_font = ui_small_font;
  151.     n=12; row = 3; col = 1; w = 1; h = 1;
  152.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  153.     Pad[n]->canvas->cv_font = ui_small_font;
  154.     n=13; row = 3; col = 2; w = 1; h = 1;
  155.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  156.     Pad[n]->canvas->cv_font = ui_small_font;
  157.     n=14; row = 3; col = 3; w = 1; h = 2; 
  158.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  159.     Pad[n]->canvas->cv_font = ui_small_font;
  160.     n=15; row = 4; col = 0; w = 2; h = 1;
  161.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  162.     Pad[n]->canvas->cv_font = ui_small_font;
  163.     n=16; row = 4; col = 2; w = 1; h = 1; 
  164.     Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
  165.     Pad[n]->canvas->cv_font = ui_small_font;
  166.  
  167.     HotKey[0] = KEY_CTRLED + KEY_NUMLOCK;
  168.     HotKey[1] = KEY_CTRLED + KEY_PADDIVIDE;
  169.     HotKey[2] = KEY_CTRLED + KEY_PADMULTIPLY;
  170.     HotKey[3] = KEY_CTRLED + KEY_PADMINUS;
  171.     HotKey[4] = KEY_CTRLED + KEY_PAD7;
  172.     HotKey[5] = KEY_CTRLED + KEY_PAD8;
  173.     HotKey[6] = KEY_CTRLED + KEY_PAD9;
  174.     HotKey[7] = KEY_CTRLED + KEY_PADPLUS;
  175.     HotKey[8] = KEY_CTRLED + KEY_PAD4;
  176.     HotKey[9] = KEY_CTRLED + KEY_PAD5;
  177.     HotKey[10] = KEY_CTRLED + KEY_PAD6;
  178.     HotKey[11] = KEY_CTRLED + KEY_PAD1;
  179.     HotKey[12] = KEY_CTRLED + KEY_PAD2;
  180.     HotKey[13] = KEY_CTRLED + KEY_PAD3;
  181.     HotKey[14] = KEY_CTRLED + KEY_PADENTER;
  182.     HotKey[15] = KEY_CTRLED + KEY_PAD0;
  183.     HotKey[16] = KEY_CTRLED + KEY_PADPERIOD;
  184.  
  185.     HotKey1[0] = KEY_SHIFTED + KEY_CTRLED + KEY_NUMLOCK;
  186.     HotKey1[1] = KEY_SHIFTED + KEY_CTRLED + KEY_PADDIVIDE;
  187.     HotKey1[2] = KEY_SHIFTED + KEY_CTRLED + KEY_PADMULTIPLY;
  188.     HotKey1[3] = KEY_SHIFTED + KEY_CTRLED + KEY_PADMINUS;
  189.     HotKey1[4] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD7;
  190.     HotKey1[5] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD8;
  191.     HotKey1[6] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD9;
  192.     HotKey1[7] = KEY_SHIFTED + KEY_CTRLED + KEY_PADPLUS;
  193.     HotKey1[8] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD4;
  194.     HotKey1[9] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD5;
  195.     HotKey1[10] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD6;
  196.     HotKey1[11] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD1;
  197.     HotKey1[12] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD2;
  198.     HotKey1[13] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD3;
  199.     HotKey1[14] = KEY_SHIFTED + KEY_CTRLED + KEY_PADENTER;
  200.     HotKey1[15] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD0;
  201.     HotKey1[16] = KEY_SHIFTED + KEY_CTRLED + KEY_PADPERIOD;
  202.  
  203.     active_pad = -1;
  204.  
  205. }
  206.  
  207.  
  208. void ui_pad_deactivate()
  209. {
  210.     int i;
  211.  
  212.     for (i=0; i<17; i++ )
  213.     {
  214.         Pad[i]->text = NULL;
  215.     }
  216. }
  217.  
  218. static void ui_pad_set_active( int n )
  219. {
  220.     int np;
  221.     char * name;
  222.     int i, j;
  223.  
  224.     
  225.  
  226.     gr_set_current_canvas( NULL );
  227.     gr_setcolor( CWHITE );
  228.     gr_urect( desc_x, desc_y, desc_x+ 56*4-1, desc_y+15 );
  229.     gr_set_fontcolor( CBLACK, CWHITE );
  230.     gr_ustring( desc_x, desc_y, KeyPad[n]->description );
  231.         
  232.     for (i=0; i<17; i++ )
  233.     {
  234.         Pad[i]->text = KeyPad[n]->buttontext[i];
  235.         Pad[i]->status = 1;
  236.         Pad[i]->user_function = NULL;
  237.         Pad[i]->dim_if_no_function = 1;
  238.         Pad[i]->hotkey = -1;
  239.                 
  240.         for (j=0; j< KeyPad[n]->numkeys; j++ )
  241.         {
  242.             if (HotKey[i] == KeyPad[n]->keycode[j] )
  243.             {
  244.                 Pad[i]->hotkey =  HotKey[i];
  245.                 Pad[i]->user_function = func_nget( KeyPad[n]->function_number[j], &np, &name );
  246.             }
  247.             if (HotKey1[i] == KeyPad[n]->keycode[j] )
  248.             {
  249.                 Pad[i]->hotkey1 =  HotKey1[i];
  250.                 Pad[i]->user_function1 = func_nget( KeyPad[n]->function_number[j], &np, &name );            }
  251.         }
  252.     }
  253.  
  254.     active_pad = n;
  255. }
  256.  
  257. void ui_pad_goto(int n)
  258. {
  259.     if ( KeyPad[n] != NULL )
  260.         ui_pad_set_active(n);
  261. }
  262.  
  263. void ui_pad_goto_next()
  264. {
  265.     int i, si;
  266.  
  267.     i = active_pad + 1;
  268.     si = i;
  269.     
  270.     while( KeyPad[i]==NULL )
  271.     {
  272.         i++;
  273.         if (i >= MAX_NUM_PADS)
  274.             i = 0;
  275.         if (i == si )
  276.             break;
  277.     }
  278.     ui_pad_set_active(i);
  279. }
  280.  
  281. void ui_pad_goto_prev()
  282. {
  283.     int i, si;
  284.  
  285.     if (active_pad == -1 ) 
  286.         active_pad = MAX_NUM_PADS;
  287.     
  288.     i = active_pad - 1;
  289.     if (i<0) i= MAX_NUM_PADS - 1;
  290.     si = i;
  291.     
  292.     while( KeyPad[i]==NULL )
  293.     {
  294.         i--;
  295.         if (i < 0)
  296.             i = MAX_NUM_PADS-1;
  297.         if (i == active_pad )
  298.             break;
  299.     }
  300.     ui_pad_set_active(i);
  301. }
  302.  
  303. void ui_pad_read( int n, char * filename )
  304. {
  305.     char * ptr;
  306.     char buffer[100];
  307.     char text[100];
  308.     FILE * infile;
  309.     int linenumber = 0;
  310.     int i;
  311.     int keycode, functionnumber;
  312.  
  313.     infile = fopen( filename, "rt" );
  314.     if (!infile) {
  315.         Warning( "Couldn't find %s", filename );
  316.         return;
  317.     }
  318.                       
  319.     //MALLOC( KeyPad[n], UI_KEYPAD, 1 );//Hack by KRB
  320.     KeyPad[n]=(UI_KEYPAD *)malloc(1*sizeof(UI_KEYPAD));
  321.  
  322.             
  323.     for (i=0; i < 17; i++ ) {
  324.         //MALLOC( KeyPad[n]->buttontext[i], char, 100 );//Hack by KRB
  325.         KeyPad[n]->buttontext[i]=(char *)malloc(100*sizeof(char));
  326.     }
  327.  
  328.     KeyPad[n]->numkeys = 0;
  329.  
  330.     for (i=0; i<100; i++ )
  331.     {
  332.         KeyPad[n]->keycode[i] = -1;
  333.         KeyPad[n]->function_number[i] = 0;
  334.     }
  335.  
  336.     while ( linenumber < 22)
  337.     {
  338.         fgets( buffer, 100, infile );
  339.         REMOVE_EOL( buffer );
  340.  
  341.         switch( linenumber+1 )
  342.         {
  343.         case 1:
  344.             strncpy( KeyPad[n]->description, buffer, 100 );
  345.             break;
  346.         //===================== ROW 0 ==============================
  347.         case 3:
  348.             LineParse( 1, text, buffer );
  349.             sprintf( KeyPad[n]->buttontext[0], "%s\n", text );
  350.             LineParse( 2, text, buffer );
  351.             sprintf( KeyPad[n]->buttontext[1], "%s\n", text );
  352.             LineParse( 3, text, buffer );
  353.             sprintf( KeyPad[n]->buttontext[2], "%s\n", text );
  354.             LineParse( 4, text, buffer );
  355.             sprintf( KeyPad[n]->buttontext[3], "%s\n", text );
  356.             break;
  357.         case 4:
  358.             LineParse( 1, text, buffer );
  359.             sprintf( KeyPad[n]->buttontext[0], "%s%s\n", KeyPad[n]->buttontext[0],text );
  360.             LineParse( 2, text, buffer );    
  361.             sprintf( KeyPad[n]->buttontext[1], "%s%s\n", KeyPad[n]->buttontext[1],text );
  362.             LineParse( 3, text, buffer );
  363.             sprintf( KeyPad[n]->buttontext[2], "%s%s\n", KeyPad[n]->buttontext[2],text );
  364.             LineParse( 4, text, buffer );
  365.             sprintf( KeyPad[n]->buttontext[3], "%s%s\n", KeyPad[n]->buttontext[3],text );
  366.             break;
  367.         case 5:
  368.             LineParse( 1, text, buffer );
  369.             sprintf( KeyPad[n]->buttontext[0], "%s%s", KeyPad[n]->buttontext[0],text );
  370.             LineParse( 2, text, buffer );    
  371.             sprintf( KeyPad[n]->buttontext[1], "%s%s", KeyPad[n]->buttontext[1],text );
  372.             LineParse( 3, text, buffer );
  373.             sprintf( KeyPad[n]->buttontext[2], "%s%s", KeyPad[n]->buttontext[2],text );
  374.             LineParse( 4, text, buffer );
  375.             sprintf( KeyPad[n]->buttontext[3], "%s%s", KeyPad[n]->buttontext[3],text );
  376.             break;
  377.         //===================== ROW 1 ==============================
  378.         case 7:
  379.             LineParse( 1, text, buffer );
  380.             sprintf( KeyPad[n]->buttontext[4], "%s\n", text );
  381.             LineParse( 2, text, buffer );    
  382.             sprintf( KeyPad[n]->buttontext[5], "%s\n", text );
  383.             LineParse( 3, text, buffer);       
  384.             sprintf( KeyPad[n]->buttontext[6], "%s\n", text );
  385.             LineParse( 4, text, buffer );
  386.             sprintf( KeyPad[n]->buttontext[7], "%s\n", text );
  387.             break;
  388.         case 8:
  389.             LineParse( 1, text, buffer );
  390.             sprintf( KeyPad[n]->buttontext[4], "%s%s\n", KeyPad[n]->buttontext[4],text );
  391.             LineParse( 2, text, buffer );    
  392.             sprintf( KeyPad[n]->buttontext[5], "%s%s\n", KeyPad[n]->buttontext[5],text );
  393.             LineParse( 3, text, buffer );
  394.             sprintf( KeyPad[n]->buttontext[6], "%s%s\n", KeyPad[n]->buttontext[6],text );
  395.             LineParse( 4, text, buffer );
  396.             sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
  397.             break;
  398.         case 9:
  399.             LineParse( 1, text, buffer );
  400.             sprintf( KeyPad[n]->buttontext[4], "%s%s", KeyPad[n]->buttontext[4],text );
  401.             LineParse( 2, text, buffer );    
  402.             sprintf( KeyPad[n]->buttontext[5], "%s%s", KeyPad[n]->buttontext[5],text );
  403.             LineParse( 3, text, buffer );
  404.             sprintf( KeyPad[n]->buttontext[6], "%s%s", KeyPad[n]->buttontext[6],text );
  405.             LineParse( 4, text, buffer );
  406.             sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
  407.             break;
  408.         case 10:
  409.             ptr = strrchr( buffer, 179 );
  410.             *ptr = 0;
  411.             ptr = strrchr( buffer, 180 );   ptr++;
  412.             sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],ptr );
  413.             break;
  414.         //======================= ROW 2 ==============================
  415.         case 11:
  416.             LineParse( 1, text, buffer );
  417.             sprintf( KeyPad[n]->buttontext[8], "%s\n", text );
  418.             LineParse( 2, text, buffer );    
  419.             sprintf( KeyPad[n]->buttontext[9], "%s\n", text );
  420.             LineParse( 3, text, buffer);       
  421.             sprintf( KeyPad[n]->buttontext[10], "%s\n", text );
  422.             LineParse( 4, text, buffer );
  423.             sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
  424.             break;
  425.         case 12:
  426.             LineParse( 1, text, buffer );
  427.             sprintf( KeyPad[n]->buttontext[8], "%s%s\n", KeyPad[n]->buttontext[8],text );
  428.             LineParse( 2, text, buffer );    
  429.             sprintf( KeyPad[n]->buttontext[9], "%s%s\n", KeyPad[n]->buttontext[9],text );
  430.             LineParse( 3, text, buffer );
  431.             sprintf( KeyPad[n]->buttontext[10], "%s%s\n", KeyPad[n]->buttontext[10],text );
  432.             LineParse( 4, text, buffer );
  433.             sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
  434.             break;
  435.         case 13:
  436.             LineParse( 1, text, buffer );
  437.             sprintf( KeyPad[n]->buttontext[8], "%s%s", KeyPad[n]->buttontext[8],text );
  438.             LineParse( 2, text, buffer );    
  439.             sprintf( KeyPad[n]->buttontext[9], "%s%s", KeyPad[n]->buttontext[9],text );
  440.             LineParse( 3, text, buffer );
  441.             sprintf( KeyPad[n]->buttontext[10], "%s%s", KeyPad[n]->buttontext[10],text );
  442.             LineParse( 4, text, buffer );
  443.             sprintf( KeyPad[n]->buttontext[7], "%s%s", KeyPad[n]->buttontext[7],text );
  444.             break;
  445.         // ====================== ROW 3 =========================
  446.         case 15:
  447.             LineParse( 1, text, buffer );
  448.             sprintf( KeyPad[n]->buttontext[11], "%s\n", text );
  449.             LineParse( 2, text, buffer );    
  450.             sprintf( KeyPad[n]->buttontext[12], "%s\n", text );
  451.             LineParse( 3, text, buffer);       
  452.             sprintf( KeyPad[n]->buttontext[13], "%s\n", text );
  453.             LineParse( 4, text, buffer );
  454.             sprintf( KeyPad[n]->buttontext[14], "%s\n", text );
  455.             break;
  456.         case 16:
  457.             LineParse( 1, text, buffer );
  458.             sprintf( KeyPad[n]->buttontext[11], "%s%s\n", KeyPad[n]->buttontext[11],text );
  459.             LineParse( 2, text, buffer );    
  460.             sprintf( KeyPad[n]->buttontext[12], "%s%s\n", KeyPad[n]->buttontext[12],text );
  461.             LineParse( 3, text, buffer );
  462.             sprintf( KeyPad[n]->buttontext[13], "%s%s\n", KeyPad[n]->buttontext[13],text );
  463.             LineParse( 4, text, buffer );
  464.             sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
  465.             break;
  466.         case 17:
  467.             LineParse( 1, text, buffer );
  468.             sprintf( KeyPad[n]->buttontext[11], "%s%s", KeyPad[n]->buttontext[11],text );
  469.             LineParse( 2, text, buffer );    
  470.             sprintf( KeyPad[n]->buttontext[12], "%s%s", KeyPad[n]->buttontext[12],text );
  471.             LineParse( 3, text, buffer );
  472.             sprintf( KeyPad[n]->buttontext[13], "%s%s", KeyPad[n]->buttontext[13],text );
  473.             LineParse( 4, text, buffer );
  474.             sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
  475.             break;
  476.         case 18:
  477.             ptr = strrchr( buffer, 179 );
  478.             *ptr = 0;
  479.             ptr = strrchr( buffer, 180 ); ptr++;
  480.             sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14], ptr );
  481.             break;
  482.         //======================= ROW 4 =========================
  483.         case 19:
  484.             LineParse( 1, text, buffer );
  485.             sprintf( KeyPad[n]->buttontext[15], "%s\n", text );
  486.             LineParse( 2, text, buffer );    
  487.             sprintf( KeyPad[n]->buttontext[16], "%s\n", text );
  488.             LineParse( 3, text, buffer );
  489.             sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
  490.             break;
  491.         case 20:
  492.             LineParse( 1, text, buffer );
  493.             sprintf( KeyPad[n]->buttontext[15], "%s%s\n", KeyPad[n]->buttontext[15],text );
  494.             LineParse( 2, text, buffer );    
  495.             sprintf( KeyPad[n]->buttontext[16], "%s%s\n", KeyPad[n]->buttontext[16],text );
  496.             LineParse( 3, text, buffer );
  497.             sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
  498.             break;
  499.         case 21:
  500.             LineParse( 1, text, buffer );
  501.             sprintf( KeyPad[n]->buttontext[15], "%s%s", KeyPad[n]->buttontext[15],text );
  502.             LineParse( 2, text, buffer );    
  503.             sprintf( KeyPad[n]->buttontext[16], "%s%s", KeyPad[n]->buttontext[16],text );
  504.             LineParse( 3, text, buffer );
  505.             sprintf( KeyPad[n]->buttontext[14], "%s%s", KeyPad[n]->buttontext[14],text );
  506.             break;
  507.         }
  508.                                         
  509.         linenumber++;   
  510.     }
  511.  
  512.     // Get the keycodes...
  513.  
  514.     while (fscanf( infile, " %s %s ", text, buffer ))
  515.     {   
  516.         if (strlen(text) < 3) break;
  517.         keycode = DecodeKeyText(text);
  518.         functionnumber = func_get_index(buffer);
  519.         if (functionnumber==-1)
  520.         {
  521.             Error( "Unknown function, %s, in %s\n", buffer, filename );
  522.         } else if (keycode==-1)
  523.         {
  524.             Error( "Unknown keystroke, %s, in %s\n", text, filename );
  525.             //MessageBox( -2, -2, 1, buffer, "Ok" );
  526.  
  527.         } else {
  528.             KeyPad[n]->keycode[KeyPad[n]->numkeys] = keycode;
  529.             KeyPad[n]->function_number[KeyPad[n]->numkeys] = functionnumber;
  530.             KeyPad[n]->numkeys++;
  531.         }
  532.     }
  533.     
  534.     fclose(infile);
  535.  
  536. }
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551. /*
  552.  
  553.     ui_pad_init(2);
  554.  
  555.     ui_pad_read( 0, "curve.pad" );
  556.     ui_pad_read( 1, "segmove.pad" );
  557.     
  558.     
  559.     //open window
  560.         
  561.         ui_pad_activate();
  562.  
  563.         
  564.             ui_pad_goto( n );
  565.             ui_pad_goto_next( n );
  566.             ui_pad_goto_previous( n );
  567.     
  568.  
  569.         ui_pad_deactivate();
  570.         
  571.     
  572.  
  573.     //close window
  574.  
  575.     ui_pad_close();
  576.  
  577.     exit();
  578. */
  579.  
  580.